package com.ruoyi.syf.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.syf.common.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.Date;

@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel("排查任务表")
public class RiskCheckTask extends BaseEntity {
    private static final long serialVersionUID = 1L;

    @TableId(type = IdType.AUTO)
    @ApiModelProperty(value = "id")
    private Long id;

    @ApiModelProperty(value = "管控措施ID")
    private Long measureId;

    @ApiModelProperty(value = "检查人部门")
    private Long checkByDept;

    @ApiModelProperty(value = "检查人")
    private String checkBys;

    @ApiModelProperty(value = "检查人名称")
    private String checkByNames;

    @ApiModelProperty(value = "任务类型")
    private String taskType;

    @ApiModelProperty(value = "包保任务对应项")
    private String taskNum;

    /**-----------定时任务配置信息-----------*/

    @ApiModelProperty(value = "定时任务类型")
    private String cycleType;

    @ApiModelProperty(value = "排查周期")
    private Integer cycle;

    @ApiModelProperty(value = "周期单位,1秒、2分钟、3小时、4天、5周、6月、7年 (秒、分钟、周不使用）")
    private String cycleUnit;

    @ApiModelProperty(value = "任务时长")
    private Integer lastCycle;

    @ApiModelProperty(value = "时长单位,1秒、2分钟、3小时、4天、5周、6月、7年")
    private String lastCycleUnit;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "开始时间")
    private Date startTime;

    /**
     * 启动该任务时，以开始时间（startTime）为节点，一次性生成之前周期的排查记录
     */
    @ApiModelProperty(value = "生成往期周期任务数")
    private Integer previousPeriodsNum;

    @ApiModelProperty(value = "状态，1-启用，0-禁用")
    private Boolean status;

    /**-----------定时任务辅助配置信息-----------*/

    /**
     * 随机生成，偏移量范围(-60*1000,60*1000)
     * 将定时任务分散执行，避免高并发
     */
    @ApiModelProperty(value = "偏移时间量（毫秒秒）")
    private Long excursionTime;

    /**
     *  实际开始时间 = 开始时间+偏移量时间量
     *  由实际开始时间+周期生成cron表达式
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "实际开始时间")
    private Date actualStartTime;

    /**
     * 初始=实际开始时间(actualStartTime)，启动时判断是否小于当前时间，是则更新为最近的一次执行时间
     * 下一次生成隐患排查信息的实际时间（新） = 下一次生成隐患排查信息的实际时间（原）+排查周期
     * 当最新生成隐患排查信息，排查员在规定的时间范围内排查完毕则立马生成下一周期的隐患排查信息，并更新本字段时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "下一次生成隐患排查信息的实际时间")
    private Date nextActualStartTime;

}
